﻿$(function () {
    configurarValidacao();
    aplicarMascaras();
    configurarSelects();
    criarTabs();
    configurarExpansivel();
    configurarMenu();
    traquitanaPerfil();
    cancelarEnter();

});
function cancelarEnter() {
    $('form').keypress(function (e) {
        if (e.keyCode == 13 && e.target.nodeName.toUpperCase() != 'TEXTAREA') {
            return false;
        }
    });
}
function desabilitarCampos(campos, deveDesabilitar) {
    if (deveDesabilitar)
        campos.attr("disabled", "disabled");
    else
        campos.removeAttr("disabled");
}

function traquitanaPerfil() {
    $('select#usuario').change(function () {
        // Alterado por Bruno, para poder funcionar corretamente com IIS6
        //window.location = $(this).attr('url') + '/?soeID=' + this.value;
        window.location = $(this).attr('url') + '?soeID=' + this.value;
    }).mouseover(function (e) {
        $('#userInfos').css('left', e.pageX + 10);
        $('#userInfos').css('top', e.pageY);
        $('#userInfos').toggle();
    }).mouseout(function (e) {
        $('#userInfos').toggle();
    })
    .mousemove(function (e) {
        $('#userInfos').css('left', e.pageX + 10);
        $('#userInfos').css('top', e.pageY);
    });
}

function configurarMenu() {
    $('#menu > li:last').css('float', 'none');
    $('#topo > #center > #menu > li > a').attr('href', 'javascript:void(0);');

    var pai = '';

    $('.subMenu > ul > li').each(function () {
        if (pai != $(this).parent().parent().parent().find('> a').text()) {
            $(this).css('background', 'none');
            pai = $(this).parent().parent().parent().find('> a').text();
        }
    });

    $('.subMenu').css('left', ($('#topo').position().left + 1) + 'px');
    $('.subMenu').css('top', ($('#menu').position().top + 52) + 'px');

    $('#topo > #center > #menu > li').click(function () {
        $('#topo > #center > #menu > li > a').removeAttr('style');
        $(this).find('> a').attr('style', 'color:#000066 !important');
        $('.subMenu').hide();
        $(this).find('> .subMenu').show();
    });
    //    .click(function () {
    //        $(this).find('> a').removeAttr('style');

    //        $(this).find('> .subMenu').toggle();
    //    });
}

function aplicarMascaras() {
    $('.data').setMask({ mask: '99/99/9999', autoTab: false }).datepicker();
    $('.inteiro').setMask({ mask: '9999999999', autoTab: false });
    $('.longo').setMask({ mask: '999999999999999999', autoTab: false });
    $('.percentual').setMask({ mask: '99,999', type: 'reverse', defaultValue: '000', autoTab: false });
    $('.percentualNullable').setMask({ mask: '99,999', type: 'reverse', autoTab: false });
    $('.valorHora').setMask({ mask: '99,999', type: 'reverse', defaultValue: '+', autoTab: false });
    $('.percentualNegativo').setMask({ mask: '99,999', type: 'reverse', defaultValue: '+000', autoTab: false });
    $('.valorNegativo').setMask({ mask: '99,999.999.999.999', type: 'reverse', defaultValue: '+000', autoTab: false });
    $('.valorNullable').setMask({ mask: '99,999.999.999.999', type: 'reverse', defaultValue: '+', autoTab: false });
    $('.hora').setMask({ mask: '99:99:99', autoTab: false });
    $('.dia').setMask({ mask: '99', autoTab: false });

    $('.valor').livequery(function () {
        $(this).setMask({ mask: '99,999.999.999.999', type: 'reverse', defaultValue: '+000', autoTab: false });
    });

    $('.ano').livequery(function () {
        $(this).setMask({ mask: '9999', autoTab: false });
    });

    $('.tres').livequery(function () {
        $(this).setMask({ mask: '999', autoTab: false });
    });

    $('.codigoAssociacao').livequery(function () {
        $(this).setMask({ mask: 'aa9999', autoTab: false });
    });

    $('.numeroBRM').livequery(function () {
        //$(this).setMask({ mask: 'aa9999999999999', autoTab: false });
        $(this).setMask({ mask: '9999999', autoTab: false });
    });
}

function criarTabs() {
    $('.abas').tabs();
}

function formatadorBoolean(cellValue, options, rowData) {
    return cellValue ? 'Sim' : 'Não';
}

function configurarSelects() {
    $('select:not(.noSurround)').livequery(function () {
        var select = $(this);
        var width = select.width();

        var expansivel = select.parents('div.expansivel:first');

        if (width == 0 && expansivel.length > 0) {
            expansivel.show();

            width = select.width();

            expansivel.hide();
        }

        select.wrap('<span class="ddl" style="width: ' + (width + 2) + 'px;" />');
    });
}

function configurarExpansivel() {
    $('span.expandir, span.contrair').live('click', function () {
        var div = $(this).next('div.expansivel');
        var label;
        if (div[0] == null) {

            label = $(this).next('label');
            div = label.next('div.expansivel');
            label.toggle(false);
        }

        var visible = div.is(':visible');
        div.toggle();


        if ($(this).hasClass('expandir')) {
            $(this).removeClass('expandir').addClass('contrair');
            if (label != null)
                label.toggle(false);
        }
        else {
            $(this).removeClass('contrair').addClass('expandir');
            if (label != null)
                label.toggle(true);
        }
    });
}

$.ajaxSetup({
    error: function (x, e) {
        if (x.status == 0) {
            alert('Você está trabalhando Off Line, verifique a sua conexão');
        } else if (x.status == 404) {
            alert('Página não encontrada.');
        } else if (x.status == 500) {
            alert($.parseJSON(x.responseText).Message);
        } else if (e == 'parsererror') {
            alert('Parsing JSON Request failed.');
        } else if (e == 'timeout') {
            alert('A resposta demorou mais que o esperado, tente novamente mais tarde.');
        } else {
            alert('Erro desconhecido: ' + x.responseText);
        }
    }
});


//-------------------------------
//AutoComplete
//-------------------------------
function autoComplete(elemName, hiddenName, sourceUrl, defaultValue, selectedCallback) {
    var $elem = $('#' + elemName);
    var $elemHidden = $('#' + hiddenName);
    var dataKey = 'label_' + elemName;

    if ($elemHidden.val() == '0') {
        $elemHidden.val('');
    }

    if ($elem.val() != '') {
        $elemHidden.data(dataKey, defaultValue);
    }

    var selectComboEvent = function (e, ui) {
        $elemHidden.val(ui.item.id);
        $elemHidden.data(dataKey, ui.item.label);

        if (selectedCallback && typeof (selectedCallback) == 'function') {
            selectedCallback();
        }
    };

    $elem.blur(function () {
        if ($elemHidden.val() == '' || $elemHidden.data(dataKey) != $(this).val()) {
            $elem.val('');
            $elemHidden.val('');
            $elemHidden.data(dataKey, '');

            if (selectedCallback && typeof (selectedCallback) == 'function') {
                selectedCallback();
            }
        }
    }).autocomplete({
        source: sourceUrl,
        minLength: 1,
        highlight: true,
        scroll: true,
        selectFirst: true,
        select: selectComboEvent,
        cacheLength: 1
    });
}

function autoCompleteWithType(elemName, hiddenName, fieldTypeName, sourceUrl, defaultValue, selectedCallback) {
    var $elemType = $('#' + elemName);
    var $elemHiddenType = $('#' + hiddenName);
    var $elemFieldType = $('#' + fieldTypeName);
    var dataKey = 'label_' + elemName;

    if ($elemHiddenType.val() == '0') {
        $elemHiddenType.val('');
    }

    if ($elemType.val() != '') {
        $elemHiddenType.data(dataKey, defaultValue);
    }

    var selectComboEvent = function (e, ui) {
        $elemHiddenType.val(ui.item.id);
        $elemHiddenType.data(dataKey, ui.item.label);
        $elemFieldType.val(ui.item.type);

        if (selectedCallback && typeof (selectedCallback) == 'function') {
            selectedCallback();
        }
    };

    $elemType.blur(function () {
        if ($elemHiddenType.val() == '' || $elemHiddenType.data(dataKey) != $(this).val()) {
            $elemType.val('');
            $elemHiddenType.val('');
            $elemHiddenType.data(dataKey, '');
            $elemFieldType.val('');

            if (selectedCallback && typeof (selectedCallback) == 'function') {
                selectedCallback();
            }
        }
    }).autocomplete({
        source: sourceUrl,
        minLength: 1,
        highlight: true,
        scroll: true,
        selectFirst: true,
        select: selectComboEvent,
        cacheLength: 1
    });
}

$(function () {
    jQuery.extend(jQuery.jgrid.defaults, {
        datatype: "json",
        width: 930,
        autowidth: false,
        height: 248,
        rowNum: 10,
        pager: '#paginador',
        sortname: 'Id',
        viewrecords: true,
        sortorder: "asc",
        mtype: "POST",
        loadui: 'disable',

        prmNames: {
            _search: "pesquisa",
            nd: null,
            rows: "linhas",
            page: "pagina",
            sort: "ordenarCampo",
            order: "tipoOrdenacao"
        },
        jsonReader: {
            repeatitems: false,
            id: "Id"
        }
    });
});

function textAreaMaxLength(selector, maxLength) {
    if (!maxLength) {
        maxLength = 255;
    }

    $(selector).maxlength({
        maxCharacters: maxLength,
        status: true,
        statusClass: 'textAreaStatus',
        statusText: 'caracter(es) restante(s)',
        showAlert: false
    });
}

$.fn.blockFileSize = function (options) {
    var opts = $.extend({}, $.fn.blockFileSize.defaults, options);

    return this.each(function () {

        $(this).change(function () {
            var validation = validateFileSize(this, opts.maxSize);
            var fileSize = validation.size;

            if (!$(this).next().is('.fileSize')) {
                $(this).after('<span class="fileSize">' + fileSize + ' KB</span>');
            }
            else {
                $(this).next().html(fileSize + ' KB');
            }

            $(this).next().removeClass('invalidSize');

            if (!validation.valid) {
                $(this).next().addClass('invalidSize');

                if (opts.onInvalidSize != null) {
                    opts.onInvalidSize();
                }
            }
            else {
                $(this).next().removeClass('invalidSize');
            }
        });
    });
};

$.fn.blockFileSize.defaults = {
    maxSize: 4096,
    onInvalidSize: function (fileInput) {
        alert("Tamanho de arquivo inválido.");
    }
};

function getFileSize(file) {
    var size = 0;

    if ($.browser.msie) {
        if (file.value) {
            try {
                var oas = new ActiveXObject("Scripting.FileSystemObject");
                var e = oas.getFile(file.value);
                size = e.size;
            } catch (e) { }
        }
    } else {
        if (file.files[0] != undefined) {
            size = file.files[0].fileSize;
        }
    }

    size = parseFloat(size / 1024).toFixed(0);

    return size;
}

function validateFileSize(file, maxSize) {
    var size = getFileSize(file);
    var valid = true;

    if (size != undefined && size > maxSize)
        valid = false;

    return { size: size, valid: valid };
}

//-----------------------------------
//Dialog
//-----------------------------------
function createDialog(selector, width, height, title) {
    $(selector).dialog({
        width: width,
        height: height,
        title: title,
        autoOpen: false,
        modal: true,
        closeOnEscape: false
    });
}

function openDialog(selector) {
    if (typeof (selector) == 'string') {
        selector = $(selector);
    }

    selector.dialog('open');
}

function closeDialog(selector) {
    if (typeof (selector) == 'string') {
        selector = $(selector);
    }

    selector.dialog('close');
}

//-----------------------------------
//Sortable
//-----------------------------------
function tableSortable(tableSelector, updateCallback) {
    $(tableSelector).sortable({
        items: '.sortableRow',
        containment: 'parent',
        axis: 'y',
        tolerance: 'pointer',
        handle: 'div',
        opacity: 0.5,
        update: updateCallback
    });
}

//-----------------------------------
//Filtros de Entidade, Filial, Setor e Subsidiária
//-----------------------------------
var filtros = {
    entidade: 'Entidade',
    filial: 'Filial',
    setor: 'Setor',
    subsidiaria: 'Subsidiaria',
    entidadeId: 'EntidadeId',
    filialId: 'FilialId',
    setorId: 'SetorId',
    subsidiariaId: 'SubsidiariaId',
    parametros: '',

    configurar: function () {
        autoComplete(filtros.entidade, filtros.entidadeId, appBasePath + 'Entidades.aspx/PesquisarPorNome', null, filtros.aoSelecionarEntidade);
        autoComplete(filtros.filial, filtros.filialId, appBasePath + 'Filiais.aspx/PesquisarPorNome', null, filtros.aoSelecionarFilial);
        autoComplete(filtros.setor, filtros.setorId, appBasePath + 'Setores.aspx/PesquisarPorNome', null, filtros.aoSelecionarSetor);
        autoComplete(filtros.subsidiaria, filtros.subsidiariaId, appBasePath + 'Subsidiarias.aspx/PesquisarPorNomeOuCodigo'); //, null, null);
    },

    aoSelecionarEntidade: function () {
        filtros.parametros = '';

        var entidadeId = $('#' + filtros.entidadeId).val();

        if (entidadeId != '') {
            filtros.parametros = '?entidadeId=' + entidadeId;
            filtros.atualizarParametrosSubsidiaria();
        }

        filtros.atualizarParametros();
    },

    aoSelecionarFilial: function () {
        filtros.parametros = '';

        var entidadeId = $('#' + filtros.entidadeId).val();
        var filialId = $('#' + filtros.filialId).val();
        var entidadeSelecionada = entidadeId != '';
        var filialSelecionada = filialId != '';

        if (entidadeSelecionada || filialSelecionada) {
            filtros.parametros = '?entidadeId=';

            if (entidadeSelecionada) {
                filtros.parametros += entidadeId;
                filtros.atualizarParametrosSubsidiaria();
            }

            filtros.parametros += '&filialId=';

            if (filialSelecionada) {
                filtros.parametros += filialId;
            }
        }

        filtros.atualizarParametros();
    },

    aoSelecionarSetor: function () {
        filtros.parametros = '';

        var entidadeId = $('#' + filtros.entidadeId).val();
        var filialId = $('#' + filtros.filialId).val();
        var setorId = $('#' + filtros.setorId).val();
        var entidadeSelecionada = entidadeId != '';
        var filialSelecionada = filialId != '';
        var setorSelecionado = setorId != '';

        if (entidadeSelecionada || filialSelecionada || setorSelecionado) {
            filtros.parametros = '?entidadeId=';

            if (entidadeSelecionada) {
                filtros.parametros += entidadeId;
                filtros.atualizarParametrosSubsidiaria();
            }

            filtros.parametros += '&filialId=';

            if (filialSelecionada) {
                filtros.parametros += filialId;
            }

            filtros.parametros += '&setorId=';

            if (setorSelecionado) {
                filtros.parametros += setorId;
            }
        }

        filtros.atualizarParametros();
    },

    atualizarParametrosSubsidiaria: function () {
        $('#' + filtros.subsidiaria).autocomplete('option', 'source', appBasePath + 'Subsidiarias.aspx/PesquisarPorNomeOuCodigo' + filtros.parametros);
    },

    atualizarParametros: function () {
        $('#' + filtros.filial).autocomplete('option', 'source', appBasePath + 'Filiais.aspx/PesquisarPorNome' + filtros.parametros);
        $('#' + filtros.setor).autocomplete('option', 'source', appBasePath + 'Setores.aspx/PesquisarPorNome' + filtros.parametros);
    }
};

var chamadaAjax = {
    tratarErros: function (xhRequest, errorText, thrownError) {
        var erro = eval("(" + xhRequest.responseText + ")");
        var errosEncontrados = erro.Message.toString().split("\r\n");
        var resultadoErros = [];
        for (var i = 0; i < errosEncontrados.length; i++) {
            var texto = errosEncontrados[i].toString();
            if (texto.length) {
                var item = { mensagem: texto };
                resultadoErros.push(item);
            }
        }
        formulario.mostrarErros(resultadoErros);
    }
};


var tratarErrosGridPesquisa = function (dados) {
    if (typeof (dados.sucesso) != 'undefined' && !dados.sucesso) {
        formulario.mostrarErros(dados.erros);
    }
};

var formulario = {
    mostrarErros: function (erros) {
        adicionarMensagemErro(erros);
        exibirResumoErros();
    }
};